package question02;

import java.util.LinkedList;

/**
 * @author yuan
 * @date 2021/11/26
 */
// 使用 jdk 的 LinkedList
public class Solution02 {

    public static void main(String[] args) {

        LinkedList<Integer> list1 = new LinkedList<>();
        // list1.add(2);
        // list1.add(4);
        // list1.add(3);

        // list1.add(0);

        list1.add(9);
        list1.add(9);
        list1.add(9);
        list1.add(9);
        list1.add(9);
        list1.add(9);
        list1.add(9);

        LinkedList<Integer> list2 = new LinkedList<>();
        // list2.add(5);
        // list2.add(6);
        // list2.add(4);

        // list2.add(0);

        list2.add(9);
        list2.add(9);
        list2.add(9);
        list2.add(9);
        LinkedList<Integer> list = addLinkedList(list1, list2);
        for (Integer integer : list) {
            System.out.println(integer);
        }
    }

    public static LinkedList<Integer> addLinkedList(LinkedList<Integer> list1, LinkedList<Integer> list2) {
        LinkedList<Integer> list = new LinkedList<>();
        if (list1.size() <= list2.size()) {
            // list1 的长度小于 list2 的长度，list2 剩余元素直接添加到 list 中
            // 进位
            int addBit = 0;
            for (int i = 0; i < list1.size(); i++) {
                Integer num1 = list1.get(i);
                Integer num2 = list2.get(i);
                int num = num1 + num2;
                if (addBit > 0) {
                    num += addBit;
                    addBit = 0;
                }
                if (num >= 10) {
                    addBit = 1;
                    num -= 10;
                }
                list.add(num);
            }
            // 剩余元素添加
            for (int i = list1.size(); i < list2.size(); i++) {
                // 考虑进位
                int temp = list2.get(i) + addBit;
                if (temp >= 10) {
                    addBit = 1;
                    temp -= 10;
                } else addBit = 0;
                list.add(temp);
            }
            // 最后还有一个进位
            if (addBit > 0) list.add(addBit);
        }else {
            return addLinkedList(list2, list1);
        }

        return list;
    }
}
